﻿#ifndef DSRCRYPTION_H
#define DSRCRYPTION_H

#define CRY_VERSION1    0x01
#define CRY_VERSION2    0x02

#define CUR_CRY_VERSION         0x01    // 当前的加密版本（取值范围为 0 -- 250），方便通过版本使用不同的加密方法。
#define BYTES_OF_CRY_FACTORS    32      // 加密因子字节数


class DsrCryption
{
public:
    DsrCryption();

public:
    int InitDsrCryptionCtrl(int version, unsigned int cryword, const unsigned char * factors);      // 初始化加密控制, 自动生成生成加密字和加密因子
    unsigned int GetDsrCryptionWord();                  // 获取加密字

    int EnCryption(unsigned char * pData, int size);   // 加密数据，使用当前的加密字和加密因子
    int DeCryption(unsigned char * pData, int size);   // 解密数据，使用当前的加密字和加密因子

private:
    int CreateCryWord(int version);                  // 生成加密字
    int CreateCryFactors(const unsigned char * factors);   // 生成加密因子

private:
    int m_initflag;
    unsigned int m_cryword;
    unsigned char m_factors[BYTES_OF_CRY_FACTORS];
};

#endif // DSRCRYPTION_H
